package cn.iocoder.yudao.module.infra.tts.impl.minimax.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

@Data
public class MinimaxTTSRes {
    /**
     * 音频数据信息（可能为null）
     */
    @JsonProperty("data")
    private ResponseData data;

    /**
     * 额外音频信息
     */
    @JsonProperty("extra_info")
    private ExtraInfo extra_info;

    /**
     * 本次会话的追踪ID（用于问题定位）
     */
    @JsonProperty("trace_id")
    private String trace_id;

    /**
     * 基础响应信息（错误时返回）
     */
    @JsonProperty("base_resp")
    private BaseResp base_resp;

    @Data
    public static class ResponseData {
        /**
         * 合成后的音频片段(hex编码)
         * 格式取决于请求参数(mp3/pcm/flac)
         */
        @JsonProperty("audio")
        private String audio;

        /**
         * 字幕下载链接(json格式)
         * 精确到句(不超过50字)，时间单位毫秒
         */
        @JsonProperty("subtitle_file")
        private String subtitle_file;

        /**
         * 音频流状态：
         * 1-合成中
         * 2-合成结束
         */
        @JsonProperty("status")
        private Integer status;
    }

    @Data
    public static class ExtraInfo {
        /**
         * 音频时长(毫秒)
         */
        @JsonProperty("audio_length")
        private Long audio_length;

        /**
         * 采样率(Hz)
         */
        @JsonProperty("audio_sample_rate")
        private Long audio_sample_rate;

        /**
         * 音频大小(字节)
         */
        @JsonProperty("audio_size")
        private Long audio_size;

        /**
         * 比特率(bps)
         */
        @JsonProperty("bitrate")
        private Long bitrate;

        /**
         * 音频格式(mp3/pcm/flac)
         */
        @JsonProperty("audio_format")
        private String audio_format;

        /**
         * 音频声道数：
         * 1-单声道
         * 2-双声道
         */
        @JsonProperty("audio_channel")
        private Long audio_channel;

        /**
         * 非法字符占比(0-0.1)
         * ≤0.1会正常生成音频
         * >0.1会报错
         */
        @JsonProperty("invisible_character_ratio")
        private Double invisible_character_ratio;

        /**
         * 计费字符数
         */
        @JsonProperty("usage_characters")
        private Long usage_characters;
    }

    @Data
    public static class BaseResp {
        /**
         * 错误状态码：
         * 1000-未知错误
         * 1001-超时
         * 1002-触发限流
         * 1004-鉴权失败
         * 1039-触发TPM限流
         * 1042-非法字符超过10%
         * 2013-输入格式异常
         */
        @JsonProperty("status_code")
        private Long status_code;

        /**
         * 错误详情描述
         */
        @JsonProperty("status_msg")
        private String status_msg;
    }
}